package i2.application.checklist.selenium.pages.administration.applications;

import i2.application.checklist.entities.Livrable;
import i2.application.checklist.entities.Livraison;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.Select;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CreateLivraisonPage {

	private static final Logger logger = LoggerFactory.getLogger(CreateLivraisonPage.class);
	
	protected WebDriver driver;
	
	@FindBy(name="livraison.application.id")
	private WebElement application;	

	@FindBy(name="livraison.version")
	private WebElement version;
	
	@FindBy(name="livraison.date")
	private WebElement date;
	
	@FindBy(name="livrable.categorie.id")
	private WebElement livrableCategorie;
	
	@FindBy(name="livrable.value")
	private WebElement livrableValue;

	@FindBy(name="action:ajouterLivrableLivraison")
	private WebElement ajouterLivrableSubmit;	

	@FindBy(name="action:enregistrerLivraison")
	private WebElement enregistrerLivraisonSubmit;	

	public CreateLivraisonPage(WebDriver driver) {
		this.driver = driver;
	}
	
	public void open(String url) {
		driver.get(url);
	}

	public void close() {
		driver.quit();
	}
	
	public String getTitle() {
		return driver.getTitle();
	}

	public void ajouterLivrable(Livrable livrable) {
		logger.info("ajouterLivrable {}",livrable);
		Select livrableCategorieSelect = new Select(livrableCategorie);
		livrableCategorieSelect.selectByVisibleText(livrable.getCategorie().getNom());
//		livrableValue.sendKeys(livrable.getValues());
		ajouterLivrableSubmit.click();
	}
	
	public void creer(Livraison livraison) {
		logger.info("create {}",livraison);
		
		Select applicationSelect = new Select(application);
		applicationSelect.selectByVisibleText(livraison.getApplication().getNom());
		version.sendKeys(livraison.getVersion());
		
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		date.sendKeys(sdf.format(livraison.getDate()));
		enregistrerLivraisonSubmit.click();
	}

	public void clickOnAjouterLivrableSubmit() {
		ajouterLivrableSubmit.click();
	}
	
	public void clickOnEnregistrerSubmit() {
		enregistrerLivraisonSubmit.click();
	}

	public List<String> getErrors() {
		WebElement errorsList = null;
		List<String> errorsStringList = new ArrayList<String>();
		List<WebElement> errors = new ArrayList<WebElement>();
		try {
			errorsList = driver.findElement(By.className("errorMessage"));
			errors = errorsList.findElements(By.tagName("li"));
		} catch(NoSuchElementException e) {
			logger.debug("aucune erreur de validation");
		}
		
		for (WebElement error : errors) {
			logger.info("erreur de validation : {}",error.getText());
			errorsStringList.add(error.getText());
		}
		
		return errorsStringList;
	}
}